<?php
class TwitterDiagnosis
{
	public static function execute($botObj, $tweet, $action_value)
	{
		// 爆走しないように30分の制限をつけた
		if(isset($botObj->lastDiagnosis))
		{
			$nextTime = strtotime("+30 minutes", $botObj->lastDiagnosis);
			if(time() < $nextTime)
			{
				$botObj->pluginResponse['notweet'] = 'true';
				return;
			}
		}
	
		// 凄く…長いです。
		$characters = array(
		'Alice',
		'Aya',
		'Byakuren',
		'Chen',
		'Chiyuri',
		'Cirno',
		'Daiyousei',
		'Eirin',
		'Elis',
		'Ellen',
		'Elly',
		'Flandre',
		'Mokou',
		'Gengetsu',
		'Hina',
		'Meiling',
		'Ichirin',
		'Iku',
		'Kaguya',
		'Kana',
		'Kanako',
		'Keine',
		'Kikuri',
		'Kisume',
		'Koakuma',
		'Kogasa',
		'Koishi',
		'Komachi',
		'Konngara',
		'Kotohime',
		'Kurumi',
		'Letty',
		'LilyWhite',
		'Luize',
		'LunaChild',
		'Lunasa',
		'Lyrica',
		'Mai',
		'Maribel',
		'Marisa',
		'Medicine',
		'Meira',
		'Merlin',
		'Mima',
		'Murasa',
		'Minoriko',
		'Momiji',
		'Mugetsu',
		'Mystia',
		'Nazrin',
		'Nitori',
		'Nue',
		'Orange',
		'Parsee',
		'Patchouli',
		'YakumoRan',
		'Reimu',
		'Reisen',
		'Remilia',
		'Renko',
		'Rika',
		'Rikako',
		'Rin',
		'Rinnosuke',
		'Rumia',
		'Ruukoto',
		'Sakuya',
		'Sanae',
		'Sara',
		'Sariel',
		'Satori',
		'Shikieiki',
		'Shingyoku',
		'Shinki',
		'Shizuha',
		'Shou',
		'StarSapphire',
		'Suika',
		'SunnyMilk',
		'Suwako',
		'Tenshi',
		'Tewi',
		'Tokiko',
		'Utsuho',
		'Toyohime',
		'Yorihime',
		'Wriggle',
		'Yamame',
		'Youmu',
		'Yuka',
		'Yukari',
		'Yuki',
		'Yumeko',
		'Yumemi',
		'Yuugen',
		'Yuugi',
		'Yuyuko');
	
		// ランダムなキャラを選んで
		$index = array_rand($characters);
		$character = $characters[$index];
	
		// 診断のIDとホストを解析する
		mb_regex_encoding('UTF-8');
		mb_ereg_search_init($tweet['message'], "shindanmaker.com.\d+");
		$result = mb_ereg_search();
		$url = mb_ereg_search_getregs();
		list($host,$id) = explode('/', $url[0]);
	
		$post_fields = array('u' => $character);
	
		// デートを診断サイトへポスト
		$ch = curl_init($host . '/' . $id);
		curl_setopt($ch, CURLOPT_POST,1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_HEADER,0);  // DO NOT RETURN HTTP HEADERS
		curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);  // RETURN THE CONTENTS OF THE CALL
		$return_html = curl_exec($ch);	
		
		if(!$return_html)
		{
			$botObj->logEvent("TwitterDiagnosis: No HTML!");
			$botObj->pluginResponse['notweet'] = 'true';
			return;
		}
		
		// HTML解析
		$parser = new DOMDocument();
		$parser->loadHTML($return_html);
		
		$xpathString = "//*[@class='result']/div";
		$xp = new DOMXPath($parser);
		$nodes = $xp->query($xpathString);
		foreach($nodes as $node)
		{
			if($node->textContent)
			{
				$result = trim($node->textContent);
			}
		}
		
		// 結果をツイート
		if(!strstr($result, $character))
		{
			$tweet = "なるほど…（メモメモ $character - $result http://{$host}/{$id}";
		} 
		else
		{
			$tweet = "なるほど…（メモメモ $result http://{$host}/{$id}";
		}
		
		// ツイートが長すぎて無視
		if(strlen($tweet) > 140 || !$result)
		{
			$botObj->logEvent("TwitterDiagnosis: no result or too long tweet: " . strlen($tweet));
			$botObj->pluginResponse['notweet'] = 'true';
			return;
		}
	
		// 同じ診断をしないように
		$sql = "INSERT INTO diagnosis (id) VALUES('$id')";
		$botObj->db->query($sql);
		$botObj->pluginResponse['tweet'] = $tweet;
		$botObj->lastDiagnosis = time();
	}
}
?>